//#include<iostream>
//using namespace std;
//class Date
//{
//public:
//	Date(int year = 2024, int month = 5, int day = 28)
//	{
//		_year = year;
//		_month = month;
//		_day = day;
//	}
//	// Date d2(d1)
//	Date(const Date& d)
//	{
//		_year = d._year;
//		_month = d._month;
//		_day = d._day;
//	}
//	void Print()
//	{
//		cout << _year << "-" << _month << "-" << _day << endl;
//	}
//private:
//	int _year;
//	int _month;
//	int _day;
//};
//int main()
//{
//	Date d1(2024, 5, 28);
//	d1.Print();
//
//	Date d2(d1);
//	d2.Print();
//	return 0;
//}

//#include<iostream>
//using namespace std;
//class Time
//{
//public:
//	// 构造函数
//	Time(int hour = 1, int minute = 1, int second = 1)
//	{
//		_hour = hour;
//		_minute = minute;
//		_second = second;
//	}
//	// T拷贝构造 
//	Time(const Time& t)
//	{
//		_hour = t._hour;
//		_minute = t._minute;
//		_second = t._second;
//		cout << "Time(const Time& t)" << endl;
//	}
//private:
//	int _hour;
//	int _minute;
//	int _second;
//};
//class Date
//{
//public:
//	// 构造函数
//	Date(int year = 1, int month = 1, int day = 1)
//	{
//		_year = year;
//		_month = month;
//		_day = day;
//	}
//private:
//	// 内置类型
//	int _year;
//	int _month;
//	int _day;
//	// 自定义类型
//	Time _t;
//};
//int main()
//{
//	Date d1(2024, 5, 28);
//	// 用已经存在的 d1 拷贝构造 d2 此处会调用Date类的拷贝构造
//	// 但Date类并未显示定义拷贝构造 则编译器会为Date类自动生成一个默认拷贝构造函数
//	Date d2(d1);
//	return 0;
//}

//#include<iostream>
//using namespace std;
//class Date
//{
//public:
//	Date(int year = 2024, int month = 5, int day = 28)
//	{
//		_year = year;
//		_month = month;
//		_day = day;
//	}
////private:
//	int _year;
//	int _month;
//	int _day;
//};
//// d1 == d2
//bool operator==(const Date& d1, const Date& d2)
//{
//	return d1._year == d2._year 
//		&& d1._month == d2._month 
//		&& d1._day == d2._day;
//}
//int main()
//{
//	Date d1(2024, 5, 28);
//	Date d2(2024, 5, 27);
//	cout << (d1 == d2) << endl;
//
//	return 0;
//}

//#include<iostream>
//using namespace std;
//class Date
//{
//public:
//	Date(int year = 1, int month = 1, int day = 1)
//	{
//		_year = year;
//		_month = month;
//		_day = day;
//	}
//	// d1 == d2
//	// 函数原型：bool operator==(Date* this,const Date& d2)
//	// 这里需要注意的是，左操作数是this，指向调用函数的对象
//	bool operator==(const Date& d2)
//	{
//		return _year == d2._year
//			&& _month == d2._month
//			&& _day == d2._day;
//	}
//private:
//	int _year;
//	int _month;
//	int _day;
//};
//int main()
//{
//	Date d1(2024, 5, 20);
//	Date d2(2024, 5, 21);
//	cout << (d1 == d2) << endl;
//
//	return 0;
//}

//#include<iostream>
//using namespace std;
//class Date
//{
//public:
//	Date(int year = 2024, int month = 5, int day = 28)
//	{
//		_year = year;
//		_month = month;
//		_day = day;
//	}
//	Date& operator=(const Date& d)
//	{
//		// &d 是取地址
//		if (this != &d)
//		{
//			_year = d._year;
//			_month = d._month;
//			_day = d._day;
//		}
//		return *this;// 返回左操作数d1
//	}
//private:
//	int _year;
//	int _month;
//	int _day;
//};
//int main()
//{
//
//	Date d1(2024, 5, 28);
//	Date d2(2024, 5, 27);
//
//	d1 = d2;// 两个已经存在的对象
//	return 0;
//}


#include<iostream>
using namespace std;
class Date
{
public:
	// 构造函数
	Date(int year, int month, int day)
	{
		_year = year;
		_month = month;
		_day = day;
		}
	// 拷贝构造
	Date(const Date& d)
	{
		_year = d._year;
		_month = d._month;
		_day = d._day;
		cout << "Date(const Date& d)" << endl;
	}
	// 赋值重载
	Date operator=(const Date& d)
	{
		if (this != &d)
		{
			_year = d._year;
			_month = d._month;
			_day = d._day;
		}
		return *this;
	}
private:
	int _year;
	int _month;
	int _day;
};
int main()
{
	Date d1(2024, 5, 28);
	Date d2(2024, 5, 20);
	Date d3(2024, 5, 21);

	d1 = d2 = d3;
	return 0;
}